{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "67aa983b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "Model [2A]: Difference-in-Differences – Employment<br><table style=\"text-align:center\"><tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\"></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td colspan=\"3\"><em>Dependent variable: Employment</em></td></tr><tr><td style=\"text-align:left\"></td><tr><td></td><td colspan=\"1\">2017 & 2019</td><td colspan=\"1\">2017 & 2020</td><td colspan=\"1\">2017 & 2022</td></tr><tr><td style=\"text-align:left\"></td><td>(1)</td><td>(2)</td><td>(3)</td></tr>\n",
       "<tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\"></td></tr>\n",
       "\n",
       "<tr><td style=\"text-align:left\">Intercept</td><td>9876.01<sup>***</sup></td><td>9876.01<sup>***</sup></td><td>9876.01<sup>***</sup></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td>(2163.74)</td><td>(2163.74)</td><td>(2163.74)</td></tr>\n",
       "<tr><td style=\"text-align:left\">Post</td><td>-216.67<sup></sup></td><td>-585.72<sup></sup></td><td>654.20<sup></sup></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td>(3006.91)</td><td>(2892.51)</td><td>(3113.23)</td></tr>\n",
       "<tr><td style=\"text-align:left\">Treat</td><td>5083.17<sup>*</sup></td><td>5083.17<sup>*</sup></td><td>5083.17<sup>*</sup></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td>(2825.79)</td><td>(2825.79)</td><td>(2825.79)</td></tr>\n",
       "<tr><td style=\"text-align:left\">Treat×Post</td><td>747.49<sup></sup></td><td>958.39<sup></sup></td><td>1283.89<sup></sup></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td>(3989.57)</td><td>(3873.10)</td><td>(4128.64)</td></tr>\n",
       "\n",
       "<td colspan=\"4\" style=\"border-bottom: 1px solid black\"></td></tr>\n",
       "<tr><td style=\"text-align: left\">Observations</td><td>1020</td><td>1020</td><td>1020</td></tr><tr><td style=\"text-align: left\">R<sup>2</sup></td><td>0.01</td><td>0.01</td><td>0.01</td></tr><tr><td style=\"text-align: left\">Adjusted R<sup>2</sup></td><td>0.00</td><td>0.01</td><td>0.01</td></tr><tr><td style=\"text-align: left\">Residual Std. Error</td><td>31854.16 (df=1016)</td><td>30924.24 (df=1016)</td><td>32964.51 (df=1016)</td></tr><tr><td style=\"text-align: left\">F Statistic</td><td>2.51<sup>*</sup> (df=3; 1016)</td><td>2.83<sup>**</sup> (df=3; 1016)</td><td>2.68<sup>**</sup> (df=3; 1016)</td></tr>\n",
       "<tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\"></td></tr><tr><td style=\"text-align: left\">Note:</td><td colspan=\"3\" style=\"text-align: right\"><sup>*</sup>p&lt;0.1; <sup>**</sup>p&lt;0.05; <sup>***</sup>p&lt;0.01</td></tr></table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "=== Model 2017 & 2019 ===\n",
      "                            OLS Regression Results                            \n",
      "==============================================================================\n",
      "Dep. Variable:             Employment   R-squared:                       0.007\n",
      "Model:                            OLS   Adj. R-squared:                  0.004\n",
      "Method:                 Least Squares   F-statistic:                     2.507\n",
      "Date:                Sat, 14 Jun 2025   Prob (F-statistic):             0.0576\n",
      "Time:                        18:01:29   Log-Likelihood:                -12022.\n",
      "No. Observations:                1020   AIC:                         2.405e+04\n",
      "Df Residuals:                    1016   BIC:                         2.407e+04\n",
      "Df Model:                           3                                         \n",
      "Covariance Type:                  HC1                                         \n",
      "==============================================================================\n",
      "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "Intercept   9876.0118   2163.744      4.564      0.000    5635.152    1.41e+04\n",
      "Treat       5083.1725   2825.787      1.799      0.072    -455.268    1.06e+04\n",
      "Post        -216.6706   3006.910     -0.072      0.943   -6110.106    5676.765\n",
      "Treat:Post   747.4941   3989.570      0.187      0.851   -7071.919    8566.908\n",
      "==============================================================================\n",
      "Omnibus:                     1324.204   Durbin-Watson:                   0.695\n",
      "Prob(Omnibus):                  0.000   Jarque-Bera (JB):           199125.864\n",
      "Skew:                           6.888   Prob(JB):                         0.00\n",
      "Kurtosis:                      70.049   Cond. No.                         6.85\n",
      "==============================================================================\n",
      "\n",
      "Notes:\n",
      "[1] Standard Errors are heteroscedasticity robust (HC1)\n",
      "\n",
      "\n",
      "=== Model 2017 & 2020 ===\n",
      "                            OLS Regression Results                            \n",
      "==============================================================================\n",
      "Dep. Variable:             Employment   R-squared:                       0.008\n",
      "Model:                            OLS   Adj. R-squared:                  0.005\n",
      "Method:                 Least Squares   F-statistic:                     2.827\n",
      "Date:                Sat, 14 Jun 2025   Prob (F-statistic):             0.0376\n",
      "Time:                        18:01:29   Log-Likelihood:                -11991.\n",
      "No. Observations:                1020   AIC:                         2.399e+04\n",
      "Df Residuals:                    1016   BIC:                         2.401e+04\n",
      "Df Model:                           3                                         \n",
      "Covariance Type:                  HC1                                         \n",
      "==============================================================================\n",
      "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "Intercept   9876.0118   2163.744      4.564      0.000    5635.152    1.41e+04\n",
      "Treat       5083.1725   2825.787      1.799      0.072    -455.268    1.06e+04\n",
      "Post        -585.7176   2892.506     -0.202      0.840   -6254.925    5083.490\n",
      "Treat:Post   958.3882   3873.103      0.247      0.805   -6632.753    8549.530\n",
      "==============================================================================\n",
      "Omnibus:                     1301.385   Durbin-Watson:                   0.717\n",
      "Prob(Omnibus):                  0.000   Jarque-Bera (JB):           179758.098\n",
      "Skew:                           6.703   Prob(JB):                         0.00\n",
      "Kurtosis:                      66.639   Cond. No.                         6.85\n",
      "==============================================================================\n",
      "\n",
      "Notes:\n",
      "[1] Standard Errors are heteroscedasticity robust (HC1)\n",
      "\n",
      "\n",
      "=== Model 2017 & 2022 ===\n",
      "                            OLS Regression Results                            \n",
      "==============================================================================\n",
      "Dep. Variable:             Employment   R-squared:                       0.008\n",
      "Model:                            OLS   Adj. R-squared:                  0.005\n",
      "Method:                 Least Squares   F-statistic:                     2.684\n",
      "Date:                Sat, 14 Jun 2025   Prob (F-statistic):             0.0455\n",
      "Time:                        18:01:29   Log-Likelihood:                -12057.\n",
      "No. Observations:                1020   AIC:                         2.412e+04\n",
      "Df Residuals:                    1016   BIC:                         2.414e+04\n",
      "Df Model:                           3                                         \n",
      "Covariance Type:                  HC1                                         \n",
      "==============================================================================\n",
      "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "Intercept   9876.0118   2163.744      4.564      0.000    5635.152    1.41e+04\n",
      "Treat       5083.1725   2825.787      1.799      0.072    -455.268    1.06e+04\n",
      "Post         654.2000   3113.233      0.210      0.834   -5447.625    6756.025\n",
      "Treat:Post  1283.8863   4128.635      0.311      0.756   -6808.090    9375.863\n",
      "==============================================================================\n",
      "Omnibus:                     1321.687   Durbin-Watson:                   0.466\n",
      "Prob(Omnibus):                  0.000   Jarque-Bera (JB):           194086.637\n",
      "Skew:                           6.875   Prob(JB):                         0.00\n",
      "Kurtosis:                      69.164   Cond. No.                         6.85\n",
      "==============================================================================\n",
      "\n",
      "Notes:\n",
      "[1] Standard Errors are heteroscedasticity robust (HC1)\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# MODEL 2A\n",
    "\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import statsmodels.formula.api as smf\n",
    "from stargazer.stargazer import Stargazer\n",
    "from IPython.display import display, HTML\n",
    "\n",
    "# 1) Set file path and mapping: worksheet name → post-treatment year\n",
    "file_path = 'Data Model 2A and 2B.xlsx'\n",
    "sheets_post_years = {\n",
    "    '2017 e 2019': 2019,\n",
    "    '2017 e 2020': 2020,\n",
    "    '2017 e 2022': 2022\n",
    "}\n",
    "\n",
    "# Lists to store model objects and their labels\n",
    "models_2A = []\n",
    "names_2A  = []\n",
    "\n",
    "# 2) Loop through each worksheet and fit DID regressions\n",
    "for sheet, post_year in sheets_post_years.items():\n",
    "    df = pd.read_excel(file_path, sheet_name=sheet)\n",
    "    df.rename(columns={'Emprego': 'Employment'}, inplace=True)\n",
    "    df = df[df['Ano'].isin([2017, post_year])].copy()\n",
    "    \n",
    "    # Define treatment and post dummies\n",
    "    df['Treat'] = np.where(df['Situacao'] == 'Reonerado Não Simples Nacional', 1, 0)\n",
    "    df['Post'] = np.where(df['Ano'] == post_year, 1, 0)\n",
    "    # (Note: The interaction is captured automatically by 'Treat * Post' in the model formula)\n",
    "    \n",
    "    # Fit the Difference-in-Differences model with robust standard errors (HC1)\n",
    "    model = smf.ols('Employment ~ Treat * Post', data=df).fit(cov_type='HC1')\n",
    "    models_2A.append(model)\n",
    "    names_2A.append(f'2017 & {post_year}')\n",
    "\n",
    "# 3) Generate summary table in Stargazer HTML format\n",
    "stargazer2A = Stargazer(models_2A)\n",
    "stargazer2A.title(\"Model [2A]: Difference-in-Differences – Employment\")\n",
    "stargazer2A.custom_columns(names_2A, [1]*len(models_2A))\n",
    "stargazer2A.significant_digits(2)\n",
    "\n",
    "stargazer2A.rename_covariates({\n",
    "    'Treat': 'Treat',\n",
    "    'Post': 'Post',\n",
    "    'Treat:Post': 'Treat×Post'\n",
    "})\n",
    "\n",
    "# 4) Display the table in the Jupyter notebook\n",
    "display(HTML(stargazer2A.render_html()))\n",
    "\n",
    "# 5) Save the HTML table for reporting\n",
    "with open('2A_did_reonerados_vs_simples.html', 'w', encoding='utf-8') as f:\n",
    "    f.write(stargazer2A.render_html())\n",
    "\n",
    "# 6) Print the summary for each model for transparency\n",
    "for name, model in zip(names_2A, models_2A):\n",
    "    print(f\"=== Model {name} ===\")\n",
    "    print(model.summary())\n",
    "    print(\"\\n\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "261dd813",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "Model [2B]: Difference-in-Differences – log(Employment)<br><table style=\"text-align:center\"><tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\"></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td colspan=\"3\"><em>Dependent variable: Log_Employment</em></td></tr><tr><td style=\"text-align:left\"></td><tr><td></td><td colspan=\"1\">2017 & 2019</td><td colspan=\"1\">2017 & 2020</td><td colspan=\"1\">2017 & 2022</td></tr><tr><td style=\"text-align:left\"></td><td>(1)</td><td>(2)</td><td>(3)</td></tr>\n",
       "<tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\"></td></tr>\n",
       "\n",
       "<tr><td style=\"text-align:left\">Intercept</td><td>6.81<sup>***</sup></td><td>6.81<sup>***</sup></td><td>6.81<sup>***</sup></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td>(0.15)</td><td>(0.15)</td><td>(0.15)</td></tr>\n",
       "<tr><td style=\"text-align:left\">Post</td><td>-0.01<sup></sup></td><td>0.02<sup></sup></td><td>0.04<sup></sup></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td>(0.21)</td><td>(0.21)</td><td>(0.22)</td></tr>\n",
       "<tr><td style=\"text-align:left\">Treat</td><td>1.51<sup>***</sup></td><td>1.51<sup>***</sup></td><td>1.51<sup>***</sup></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td>(0.20)</td><td>(0.20)</td><td>(0.20)</td></tr>\n",
       "<tr><td style=\"text-align:left\">Treat×Post</td><td>-0.04<sup></sup></td><td>-0.03<sup></sup></td><td>0.05<sup></sup></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td>(0.28)</td><td>(0.28)</td><td>(0.28)</td></tr>\n",
       "\n",
       "<td colspan=\"4\" style=\"border-bottom: 1px solid black\"></td></tr>\n",
       "<tr><td style=\"text-align: left\">Observations</td><td>1006</td><td>1003</td><td>1005</td></tr><tr><td style=\"text-align: left\">R<sup>2</sup></td><td>0.10</td><td>0.10</td><td>0.10</td></tr><tr><td style=\"text-align: left\">Adjusted R<sup>2</sup></td><td>0.10</td><td>0.10</td><td>0.10</td></tr><tr><td style=\"text-align: left\">Residual Std. Error</td><td>2.25 (df=1002)</td><td>2.22 (df=999)</td><td>2.25 (df=1001)</td></tr><tr><td style=\"text-align: left\">F Statistic</td><td>36.88<sup>***</sup> (df=3; 1002)</td><td>37.68<sup>***</sup> (df=3; 999)</td><td>39.01<sup>***</sup> (df=3; 1001)</td></tr>\n",
       "<tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\"></td></tr><tr><td style=\"text-align: left\">Note:</td><td colspan=\"3\" style=\"text-align: right\"><sup>*</sup>p&lt;0.1; <sup>**</sup>p&lt;0.05; <sup>***</sup>p&lt;0.01</td></tr></table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "=== Model 2B (2017 & 2019) ===\n",
      "                            OLS Regression Results                            \n",
      "==============================================================================\n",
      "Dep. Variable:         Log_Employment   R-squared:                       0.099\n",
      "Model:                            OLS   Adj. R-squared:                  0.096\n",
      "Method:                 Least Squares   F-statistic:                     36.88\n",
      "Date:                Sat, 14 Jun 2025   Prob (F-statistic):           1.30e-22\n",
      "Time:                        18:01:37   Log-Likelihood:                -2242.3\n",
      "No. Observations:                1006   AIC:                             4493.\n",
      "Df Residuals:                    1002   BIC:                             4512.\n",
      "Df Model:                           3                                         \n",
      "Covariance Type:                  HC1                                         \n",
      "==============================================================================\n",
      "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "Intercept      6.8142      0.150     45.478      0.000       6.520       7.108\n",
      "Treat          1.5106      0.197      7.665      0.000       1.124       1.897\n",
      "Post          -0.0076      0.214     -0.036      0.972      -0.427       0.411\n",
      "Treat:Post    -0.0387      0.284     -0.136      0.892      -0.596       0.518\n",
      "==============================================================================\n",
      "Omnibus:                       41.389   Durbin-Watson:                   0.959\n",
      "Prob(Omnibus):                  0.000   Jarque-Bera (JB):               46.140\n",
      "Skew:                          -0.483   Prob(JB):                     9.57e-11\n",
      "Kurtosis:                       3.410   Cond. No.                         6.86\n",
      "==============================================================================\n",
      "\n",
      "Notes:\n",
      "[1] Standard Errors are heteroscedasticity robust (HC1)\n",
      "\n",
      "\n",
      "=== Model 2B (2017 & 2020) ===\n",
      "                            OLS Regression Results                            \n",
      "==============================================================================\n",
      "Dep. Variable:         Log_Employment   R-squared:                       0.102\n",
      "Model:                            OLS   Adj. R-squared:                  0.099\n",
      "Method:                 Least Squares   F-statistic:                     37.68\n",
      "Date:                Sat, 14 Jun 2025   Prob (F-statistic):           4.54e-23\n",
      "Time:                        18:01:37   Log-Likelihood:                -2223.2\n",
      "No. Observations:                1003   AIC:                             4454.\n",
      "Df Residuals:                     999   BIC:                             4474.\n",
      "Df Model:                           3                                         \n",
      "Covariance Type:                  HC1                                         \n",
      "==============================================================================\n",
      "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "Intercept      6.8142      0.150     45.478      0.000       6.520       7.108\n",
      "Treat          1.5106      0.197      7.665      0.000       1.124       1.897\n",
      "Post           0.0240      0.212      0.114      0.910      -0.391       0.439\n",
      "Treat:Post    -0.0341      0.281     -0.121      0.903      -0.585       0.517\n",
      "==============================================================================\n",
      "Omnibus:                       33.731   Durbin-Watson:                   0.986\n",
      "Prob(Omnibus):                  0.000   Jarque-Bera (JB):               36.439\n",
      "Skew:                          -0.442   Prob(JB):                     1.22e-08\n",
      "Kurtosis:                       3.303   Cond. No.                         6.85\n",
      "==============================================================================\n",
      "\n",
      "Notes:\n",
      "[1] Standard Errors are heteroscedasticity robust (HC1)\n",
      "\n",
      "\n",
      "=== Model 2B (2017 & 2022) ===\n",
      "                            OLS Regression Results                            \n",
      "==============================================================================\n",
      "Dep. Variable:         Log_Employment   R-squared:                       0.105\n",
      "Model:                            OLS   Adj. R-squared:                  0.102\n",
      "Method:                 Least Squares   F-statistic:                     39.01\n",
      "Date:                Sat, 14 Jun 2025   Prob (F-statistic):           7.67e-24\n",
      "Time:                        18:01:37   Log-Likelihood:                -2240.3\n",
      "No. Observations:                1005   AIC:                             4489.\n",
      "Df Residuals:                    1001   BIC:                             4508.\n",
      "Df Model:                           3                                         \n",
      "Covariance Type:                  HC1                                         \n",
      "==============================================================================\n",
      "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "Intercept      6.8142      0.150     45.478      0.000       6.520       7.108\n",
      "Treat          1.5106      0.197      7.665      0.000       1.124       1.897\n",
      "Post           0.0419      0.216      0.194      0.846      -0.382       0.466\n",
      "Treat:Post     0.0519      0.285      0.183      0.855      -0.506       0.610\n",
      "==============================================================================\n",
      "Omnibus:                       38.396   Durbin-Watson:                   0.649\n",
      "Prob(Omnibus):                  0.000   Jarque-Bera (JB):               42.230\n",
      "Skew:                          -0.468   Prob(JB):                     6.76e-10\n",
      "Kurtosis:                       3.363   Cond. No.                         6.86\n",
      "==============================================================================\n",
      "\n",
      "Notes:\n",
      "[1] Standard Errors are heteroscedasticity robust (HC1)\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# MODEL 2B\n",
    "\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import statsmodels.formula.api as smf\n",
    "from stargazer.stargazer import Stargazer\n",
    "from IPython.display import display, HTML\n",
    "\n",
    "# 1) Set the file path and mapping: worksheet name → post-treatment year\n",
    "file_path = 'Data Model 2A and 2B.xlsx'\n",
    "sheets_post_years = {\n",
    "    '2017 e 2019': 2019,\n",
    "    '2017 e 2020': 2020,\n",
    "    '2017 e 2022': 2022\n",
    "}\n",
    "\n",
    "models_2B = []\n",
    "names_2B  = []\n",
    "\n",
    "# 2) Loop through each worksheet for DID regressions (log employment)\n",
    "for sheet, post_year in sheets_post_years.items():\n",
    "    # Load and filter for relevant years\n",
    "    df = pd.read_excel(file_path, sheet_name=sheet)\n",
    "    df.rename(columns={'Emprego': 'Employment'}, inplace=True)\n",
    "    df = df[df['Ano'].isin([2017, post_year])].copy()\n",
    "    \n",
    "    # Remove rows with zero Employment to avoid log(0)\n",
    "    df = df[df['Employment'] > 0]\n",
    "    \n",
    "    # Treatment and Post dummies\n",
    "    df['Treat'] = np.where(\n",
    "        df['Situacao'] == 'Reonerado Não Simples Nacional', 1, 0\n",
    "    )\n",
    "    df['Post'] = np.where(df['Ano'] == post_year, 1, 0)\n",
    "    \n",
    "    # Log of dependent variable\n",
    "    df['Log_Employment'] = np.log(df['Employment'])\n",
    "    \n",
    "    # Fit DID model with robust standard errors\n",
    "    model = smf.ols('Log_Employment ~ Treat * Post', data=df).fit(cov_type='HC1')\n",
    "    \n",
    "    models_2B.append(model)\n",
    "    names_2B.append(f'2017 & {post_year}')\n",
    "\n",
    "# 3) Generate Stargazer-style summary table in HTML\n",
    "stargazer2B = Stargazer(models_2B)\n",
    "stargazer2B.title(\"Model [2B]: Difference-in-Differences – log(Employment)\")\n",
    "stargazer2B.custom_columns(names_2B, [1]*len(models_2B))\n",
    "stargazer2B.significant_digits(2)\n",
    "\n",
    "stargazer2B.rename_covariates({\n",
    "    'Treat': 'Treat',\n",
    "    'Post': 'Post',\n",
    "    'Treat:Post': 'Treat×Post'\n",
    "})\n",
    "\n",
    "# 4) Display table in notebook\n",
    "display(HTML(stargazer2B.render_html()))\n",
    "\n",
    "# 5) Save HTML table for reporting\n",
    "with open('2B_log_did_reonerados_vs_simples.html', 'w', encoding='utf-8') as f:\n",
    "    f.write(stargazer2B.render_html())\n",
    "\n",
    "# 6) Print the summary for each model for transparency\n",
    "for name, model in zip(names_2B, models_2B):\n",
    "    print(f\"=== Model 2B ({name}) ===\")\n",
    "    print(model.summary())\n",
    "    print(\"\\n\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2a9941db",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
